//================v3要点总结===============
/**
 * 1.针对v3优化，只计算可能用到的值
 *
 */

/**
 * @param {number} n
 * @return {number}
 */
var climbStairs = function (n) {
  if (n <= 2) {
    return n;
  }

  let level = 2;
  let rslt = 1; // 最后一层必有一个
  let arr = new Array(n + 1).fill(1, 1, 3);
  for (let i = 2; i < n; i++) {
    // 采用倒写的方式，避免改动依赖的值
    for (let col = Math.min(2 * level - 1, n); col > level; col--) {
      arr[col] = arr[col - 1] + arr[col - 2];
    }
    // 给一层两边赋值
    arr[level] = 1;
    2 * level <= n && (arr[2 * level] = 1);
    if (n >= level && n <= 2 * level) {
      rslt += arr[n];
    }
    level++;
  }
  // 把最后
  return rslt;
};

console.log(climbStairs(4));
